﻿#region Usings

using GateShift.Client.Graphics.Interfaces.Managers;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

#endregion

namespace GateShift.Client.Graphics.Interfaces
{
    /// <summary>
    /// A screen is a grouping of related controls: buttons, sliders, panels, etc.
    /// </summary>
    public interface IScreen
    {


        IScreenManager Manager { get; }
        bool IsOpening { get; }
        bool IsClosing { get; }
        bool IsFullyOpen { get; }


        void Initialize();

        void LoadContent();

        /// <summary>
        /// Updates the status of the screen (and its transparency) while it fades in or out
        /// </summary>
        void Transition(GameTime time);

        /// <summary>
        /// Tells the screen to start fading in
        /// </summary>
        void StartOpening();

        /// <summary>
        /// Tells the screen to start fading out
        /// </summary>
        void StartClosing();

        /// <summary>
        /// Tells the screen to instantly open (no transition)
        /// </summary>
        void OpenImmediately();

        /// <summary>
        /// Tells the screen to instantly close (no transition)
        /// </summary>
        void CloseImmediately();

        /// <summary>
        /// Connects the screen's controls to input devices
        /// </summary>
        void ConnectControls();

        /// <summary>
        /// Disconnects screen controls from input devices
        /// </summary>
        void DisconnectControls();

        /// <summary>
        /// Updates the screen's dynamic components
        /// </summary>
        void Update(GameTime time);

        /// <summary>
        /// Renders the screen
        /// </summary>
        void Draw(SpriteBatch sb);
    }
}